home *** CD-ROM | disk | FTP | other *** search
/ Programmer Power Tools / Programmer Power Tools.iso / tex / dvivga9.arc / DVIHEAD.H < prev    next >
Text File  |  1988-05-30  |  17KB  |  360 lines

  1. /* -*-C-*- dvihead.h */
  2. /*-->dvihead*/
  3. /**********************************************************************/
  4. /****************************** dvihead *******************************/
  5. /**********************************************************************/
  6.  
  7. /**********************************************************************/
  8. /*************************  Revision History  *************************/
  9. /**********************************************************************/
  10.  
  11. /***********************************************************************
  12. [Begin Revision History]
  13.  
  14. <BEEBE.TEX.DVI.NEW>DVIHEAD.H.2, 24-Jun-86 18:11:55, Edit by BEEBE
  15. Added saving of all ten TeX  page counters in prtpage() in global  array
  16. tex_counter[], and  function tctos()  to convert  them to  a string  for
  17. printing.  All warning and error messages are now accompanied by a  list
  18. of the non-zero page counters to  help relate errors to output  document
  19. pages.
  20.  
  21. <BEEBE.TEX.DVI>DVIHEADER.H.21, 13-Mar-86 10:43:33, Edit by BEEBE
  22. Added use of  getenv() for  Unix and PC-DOS  to pick  up definitions  of
  23. texinputs and texfonts at runtime; if these are available, they override
  24. built-in choices.   This makes  it  possible to  move compiled  code  to
  25. similar machines with different  directory structures without having  to
  26. recompile.  For TOPS-20, this is unnecessary, since the defaults already
  27. point to these, and a name of the form /texinputs/foo.bar is  translated
  28. by PCC-20 to texinputs:foo.bar, from which the current definition of the
  29. logical name "texinputs:" is used to find the desired directory.  It can
  30. even be a  chain of directories;  in Unix  and PC-DOS, we  will need  to
  31. introduce  a  special  version  of  fopen()  to  handle  filenames  with
  32. environment variable prefixes which might represent directory chains.
  33.  
  34. Removed variable-length  argument lists  to  fatal() and  warning()  for
  35. portability.  Changed all preprocessor  #ifdef's and #ifndef's to  #if's
  36. for  portability;  all  symbols  for  devices,  operating  systems,  and
  37. implementations are now explicitly defined to be 0 or 1.  IBM PC Lattice
  38. C will not accept the operators  "!", "||", or "&&" in #if  expressions,
  39. although they should be perfectly legal; rearranged several  expressions
  40. to avoid these (introduce #else, use "|" and "&").
  41.  
  42. Added procedures fontfile() and fontsub() to encapsulate construction of
  43. system-dependent font file names  and provide for user-specifiable  font
  44. substitutions  for   unavailable   font  files   (new   runtime   option
  45. -ffontfile).
  46.  
  47. Removed old #ifdef FOOBAR ... #endif code sections in several procedures
  48. which were  completely obsolete.   Added header  comment line  to  every
  49. file; it  contains  the  EMACS  "-*-C-*-"  mode  string  and  the  exact
  50. (case-sensive) filename,  since many  functions have  been defined  with
  51. names  in  mixed  case  for  readability  (probably  should  have   used
  52. underscore instead, but none do), and on Unix, the letter case matters.
  53.  
  54. Replaced index()  and  rindex(),  which have  different  definitions  in
  55. different C  implementations, by  4.2BSD (and  coming ANSI  C  standard)
  56. functions strchr() and strrchr(), for which .h files are provided.
  57.  
  58.  
  59. <BEEBE.TEX.DVI>DVIHEADER.H.11,  8-Jan-86 16:55:59, Edit by BEEBE
  60. Added DVITYPE  Version 2.6  MAXDRIFT  correction to  pixel  coordinates.
  61. This  adds  function  fixpos()   called  from  movedown(),   moveover(),
  62. setchar(), and setrule(), and #include'd  in DVI*.c with definitions  in
  63. gblprocs.h and machdefs.h.  Revision level incremented by 0.01 (most are
  64. now at 2.01)
  65.  
  66.  
  67. <BEEBE.TEX.DVI>DVIHEADER.H.7, 22-Jul-85 12:51:02, Edit by BEEBE
  68. Added PostScript driver for Apple LaserWriter.
  69.  
  70. Added support for multiple input DVI  files to each of which all  switch
  71. options apply.
  72.  
  73.  
  74. <BEEBE.TEX>DVIJET.C.70, 30-May-85 00:33:51, Edit by BEEBE
  75. Revised "int" type  declarations to signed  types (INT8, INT16,  INT32),
  76. unsigned  types  (BYTE,   UNSIGN16,  UNSIGN32),   and  coordinate   type
  77. (COORDINATE) as  a  prelude  to moving  to  microprocessors  where  long
  78. integers impose a serious runtime penalty.
  79.  
  80. Type casts added to many assignments and arguments.
  81.  
  82. "double" changed to "float".
  83.  
  84. Added a few more "register" declarations and deleted unused variables.
  85.  
  86. Device-dependent code  sections identified  as prelude  to code  sharing
  87. between device  drivers via  "#include"  statements for  each  shareable
  88. procedure.
  89.  
  90. Added -c, -o, -r, -x, -y options and inch() procedure.
  91.  
  92. Several passes with "lint" under VAX Unix to detect further problems
  93.  
  94.  
  95. <BEEBE.TEX>DVIJET.C.18, 27-May-85 23:44:34, Edit by BEEBE
  96. Revise copy of Printronix driver for output on Hewlett-Packard Laser Jet
  97.  
  98.  
  99. <BEEBE.TEX>DVIPRX.C.125, 20-Oct-84 14:02:27, Edit by BEEBE
  100. Add mag_table[] and rewrite actfact() to use it.  Add code to readfont()
  101. and openfont()  to  choose  nearest available  font  magnification  when
  102. required one is  unavailable.  Enable  USEGLOBALMAG since  code now  can
  103. handle it properly.  Allow upper-case  option letters as equivalents  of
  104. lower-case ones -- non-Unix folks abhor such distinctions.
  105.  
  106.  
  107. <BEEBE.TEX>DVIPRX.C.118, 30-Sep-84 14:42:10, Edit by BEEBE
  108. Change = to  == in "if  (...)" in procedure  warning, change g_dolog  to
  109. BOOLEAN.
  110.  
  111.  
  112. [End Revision History]
  113. ***********************************************************************/
  114.  
  115. /**********************************************************************/
  116. /************************  Development History  ***********************/
  117. /**********************************************************************/
  118.  
  119. /***********************************************************************
  120. **
  121. **  The code is arranged  to allow easy modification  of the output  for
  122. **  display on other dot matrix printers, and for porting to a new  host
  123. **  computing environment.  The  sections labelled "Device  Definitions"
  124. **  and "Global Definitions"  below definitely  need to  be modified  in
  125. **  such a case.  A couple of the  40 or so procedures in the  '#include
  126. **  "xxx.h"' section may need to be adjusted as well, but almost all the
  127. **  rest should be both host- and output-device-independent.
  128. **
  129. **  The runtime switches will be similar for most devices, but some will
  130. **  require additional ones.  Device-name conditionals should be used to
  131. **  bracket these, so that code  can be lifted without modification  for
  132. **  use in a new dvi driver.
  133. **
  134. **  Instead of building up a bit map corresponding to the final  printer
  135. **  file, we keep a  large array which  has a one-to-one  correspondence
  136. **  with the printed page; dots in  a horizontal raster on the page  are
  137. **  consecutive in memory.   This allows  us to OR  in character  raster
  138. **  patterns without having to unpack every single bit.  At  end-of-page
  139. **  time, each  raster  row  is  trimmed of  trailing  white  space  and
  140. **  formatted into a line of data to  be sent to the printer file.   For
  141. **  those devices which  pack dots for  6, 7,  or 8 rows  into a  single
  142. **  character, some merging of raster lines will be necessary.
  143. **
  144. **  To use the program, type:
  145. **
  146. **  dvixxx {-b} {-c#} {-d#} {-ffontsubfile} {-l} {-m#} {-o#:#} {-o#} {-p}
  147. **       {-r#} {-v} {-x#units} {-y#units} dvifile(s)
  148. **
  149. **  The order of command options and DVI file names is not  significant;
  150. **  all switch values apply to all  DVI files.  DVI files are  processed
  151. **  in order from left to right.   The command options are (letter  case
  152. **  is IGNORED):
  153. **
  154. **    b    Backwards order printing from the default.  For example,
  155. **        laser printers using the Canon engine print normally
  156. **        receive pages in reverse order because they stack printed
  157. **        side up.  Some have page handling mechanisms that stack
  158. **        them face down, and in such a case -b will ensure that
  159. **        they come out in order 1,2,... instead of n,n-1,n-2,...
  160. **
  161. **    c#    Print # copies of each output page.
  162. **
  163. **    d#    Debug output to stderr if non-zero value given.
  164. **
  165. **    ffontsubfile    Define an alternate font substitution file which
  166. **        is to be used instead of the default ones (see below).
  167. **
  168. **    l    Inhibit logging.
  169. **
  170. **    m#    Reset magnification  to  #.   The  default  is  "-m603",
  171. **        corresponding   to  (1/1.2**5)  magnification of  300dpi
  172. **        fonts.   Legal  values  are int(1000*(1.2)**(k/2)) (k  =
  173. **        -16,16); other values will be set to the nearest in this
  174. **        family.   Not all fonts  will be available in  this wide
  175. **        range, and most installations will probably have  only a
  176. **        half dozen or so magnifications.
  177. **
  178. **    o# and
  179. **    o#:#    Specify a page number,  or range of page numbers,  to be
  180. **        selected for output.  This  option may be specified  any
  181. **        number of times.  If it is not specified, then all pages
  182. **        will be printed.  Pages are numbered in order  1,2,3,...
  183. **        in the file, but any page number recorded by TeX on  the
  184. **        printed page will in general be different.  As pages are
  185. **        selected  for  printing,  "[#{#}"  will  be  printed  on
  186. **        stderr, where the first is the page number in the  file,
  187. **        and the second is the value of the TeX counter, \count0,
  188. **        which usually records the printed page number.  When the
  189. **        page is completely output, a closing "]" will be printed
  190. **        on stderr.  Any error  messages from processing of  that
  191. **        page will therefore occur  between the square  brackets.
  192. **        For example, "-o1:3 -o12 -o17:23" would select pages  1,
  193. **        2, 3, 12, 17, 18, 19,  20, 21, 22, and 23 for  printing.
  194. **        Pages will always be printed in an order appropriate for
  195. **        the device so that the first document page occurs  first
  196. **        face up in the document stack.
  197. **
  198. **    p    Inhibit font preloading.  This may produce output a  few
  199. **        seconds earlier when  all pages are  output, but  should
  200. **        have  negligible  effect  on  the  execution  time,  and
  201. **        consequently, should  normally not  be specified.   When
  202. **        individual pages are being printed with the -o#  option,
  203. **        preloading is necessary (and  will be forced) to  ensure
  204. **        that all fonts are defined before they are referenced.
  205. **
  206. **    q    Quiet mode.   Status displays to stderr are  suppressed,
  207. **        unless warning or error messages are issued.
  208. **
  209. **    r#    (Device =  HP Laser Jet  only).  Specify the  Laser  Jet
  210. **        output resolution in dots per inch.  "#" must be one  of
  211. **        75, 100, 150, or 300.  The actual plot file is identical
  212. **        in each  case;  only the  size  on the  output  page  is
  213. **        changed, because the  resolution change  is effected  by
  214. **        printing 1 x 1, 2 x 2, 3 x 3, or 4 x 4 pixel blocks.
  215. **
  216. **    r    (Device  =  Golden Laser 100 only).   Select  run-length
  217. **        encoding of the  output file.  This  reduces disk  space
  218. **        typically by 10% to 40%, but increases host CPU time for
  219. **        the preparation of the output file.
  220. **
  221. **    r    (Device  = Apple ImageWriter only).   Select  run-length
  222. **        encoding of the output file.
  223. **
  224. **    r    (Device  =  Toshiba  P-1351  only).   Select  run-length
  225. **        encoding of the  output file.  This  reduces disk  space
  226. **        typically by 10% to 40%, but increases host CPU time for
  227. **        the preparation of the output file, and because of  poor
  228. **        logic in the  printer, may double  the print time!   The
  229. **        print quality  is  also  substantially  worse,  so  this
  230. **        option is generally NOT recommended.
  231. **
  232. **    s#    (Device =  Apple  LaserWriter only).   Force  characters
  233. **        larger than # pixels  wide or high  to be reloaded  each
  234. **        time they  are required.   The Version  23.0  PostScript
  235. **        interpreter has a  bug which manifests  itself in  fatal
  236. **        'VM error' messages when  large characters are sent.   A
  237. **        reasonable default  value has  been set  for this  which
  238. **        should normally avoid the problem.  Specifying -s0  will
  239. **        cause reloading of every character each time it is used.
  240. **
  241. **    v    (Device = Apple LaserWriter  only).  Force reloading  of
  242. **        all required fonts at start of each page.
  243. **
  244. **    x#bp    big point (1in = 72bp)
  245. **    x#cc    cicero (1cc = 12dd)
  246. **    x#cm    centimeter
  247. **    x#dd    didot point (1157dd = 1238pt)
  248. **    x#in    inch
  249. **    x#mm    millimeter (10mm = 1cm)
  250. **    x#pc    pica (1pc = 12pt)
  251. **    x#pt    point (72.27pt = 1in)
  252. **    x#sp    scaled point (65536sp = 1pt)
  253. **        Specify the left margin  of the TeX  page on the  output
  254. **        page in any of the indicated units.  Letter case is  not
  255. **        significant  in  the  unit  field,  which  must  not  be
  256. **        separated from  the  number  by any  space.   #  may  be
  257. **        fractional.    For   example,   "-x1.0in",   "-x2.54cm",
  258. **        "-x72.27pt", and  "-x6.0225pc" all  specify a  one  inch
  259. **        left margin.  Negative values  are permissible, and  may
  260. **        be  used  to  shift  the  output  page  left   (possibly
  261. **        truncating it on the  left) in order  to display a  wide
  262. **        TeX page.
  263. **
  264. **    y#    inch
  265. **    y#bp    big point (1in = 72bp)
  266. **    y#cc    cicero (1cc = 12dd)
  267. **    y#cm    centimeter
  268. **    y#dd    didot point (1157dd = 1238pt)
  269. **    y#in    inch
  270. **    y#mm    millimeter (10mm = 1cm)
  271. **    y#pc    pica (1pc = 12pt)
  272. **    y#pt    point (72.27pt = 1in)
  273. **    y#sp    scaled point (65536sp = 1pt)
  274. **        Specify the top  margin of  the TeX page  on the  output
  275. **        page in any of the indicated units.  Letter case is  not
  276. **        significant  in  the  unit  field,  which  must  not  be
  277. **        separated from  the  number  by any  space.   #  may  be
  278. **        fractional.    For   example,   "-y1.0in",   "-y2.54cm",
  279. **        "-y72.27pt", and "-y6.0225pc" all specify a one inch top
  280. **        margin.  Negative  values are  permissible, and  may  be
  281. **        used to shift the output page up (possibly truncating it
  282. **        on the top) in order to display a long TeX page.
  283. **
  284. **
  285. **  If no  -ffontsubfile  option  is given,  and  font  substitution  is
  286. **  required,   the   files   "dvifile.sub"   (minus   any   extension),
  287. **  "texfonts.sub", and "texinputs:texfonts.sub" will be tried in order.
  288. **  The first two will be found  on the current directory, and the  last
  289. **  is the system default.  This gives the option of  document-specific,
  290. **  user-specific, and system-specific substitutions, and the -f  option
  291. **  allows all of these to be overridden.
  292. **
  293. **  This program can only process DVI format 2 files.
  294. **
  295. **  Mark Senn  at Purdue  University wrote  the first  BitGraph  driver,
  296. **  dvibit.  This was further worked on at the University of  Washington
  297. **  by Stephen  Bechtolsheim,  Bob  Brown, Richard  Furuta,  and  Robert
  298. **  Wells.  The transformation to about  ten other device drivers,  plus
  299. **  the massive code rearrangement for many new features as well as easy
  300. **  identification of host- and  device-dependent sections, was  carried
  301. **  out at the University of Utah by Nelson H.F. Beebe.
  302. **
  303. **  Support for  pixel file  caching and  character raster  caching  was
  304. **  added by NHFB;  this should give  a decided performance  improvement
  305. **  provided the cache  sizes, MAXCACHE and  MAXOPEN, defined below  are
  306. **  sufficiently large.
  307. **
  308. **  MAXOPEN can be  set as low  as 1,  but should ideally  be about  15,
  309. **  since this may be more typical of the number of different font files
  310. **  required in mathematical manuscripts.
  311. **
  312. **  In the current version,  MAXCACHE is not  actually used, because  it
  313. **  appears sufficient raster storage will always be available even  for
  314. **  relatively complex  manuscripts.  However,  a record  is kept  which
  315. **  will permit dynamic freeing and reallocation of raster storage;  see
  316. **  procedure loadchar for details.
  317. **
  318. ***********************************************************************/
  319.  
  320.  
  321. /**********************************************************************/
  322. /************************  Global Definitions  ************************/
  323. /**********************************************************************/
  324.  
  325. /* All host-specific material resides in machdefs.h and typedefs.h;
  326. they must be revised when this dvi driver is rehosted to a new machine */
  327.  
  328. #define DEBUG    1        /* for optional massive trace printing */
  329. #undef DEBUG            /* do not want this now */
  330.  
  331. #include "machdefs.h"        /* all host-specific defines */
  332.  
  333. #include "typedefs.h"        /* typedefs (also host-specific) */
  334.  
  335. #include <stdio.h>        /* must come after the others to */
  336.                 /* enable type checking */
  337. #include <errno.h>        /* needed only for DISKFULL() definition */
  338. #if    (BSD41 | BSD42)
  339. extern int errno;        /* not in all errno.h files, sigh... */
  340. #endif
  341.  
  342. #if    IBM_PC_MICROSOFT
  343. #include <io.h>
  344. #include <stdlib.h>
  345. #include <string.h>
  346. #include <time.h>
  347. #endif
  348.  
  349. /* types.h and stat.h are needed for fstat(), which is used by special()
  350. and the virtual font mechanism in openfont.h to get the input file size. */
  351.  
  352. #if    (OS_ATARI | OS_VAXVMS | KCC_20)
  353. #include <types.h>
  354. #include <stat.h>
  355. #else /* NOT (OS_ATARI | OS_VAXVMS | KCC_20) */
  356. #include <sys/types.h>
  357. #include <sys/stat.h>
  358. #endif /* (OS_ATARI | OS_VAXVMS | KCC_20) */
  359.  
  360.